#include <iostream>
#include <chrono>
// #include <unistd.h>
#include <algorithm>
#include <vector>
// 13

using namespace std::chrono;

class Timer
{
public:
    void Start()
    {
        start = steady_clock::now();
    }

    void End()
    {
        end = steady_clock::now();
    }

    long GetDuration()
    {
        return duration_cast<milliseconds>(end-start).count();
    }

private:
    steady_clock::time_point start;
    steady_clock::time_point end;
};

void BubbleSort(std::vector<int> & v)
{
    for(int i = 0;i < v.size();i++)
    {
        for(int j = 0;j < v.size()-i-1;j++)
        {
            if(v[j]> v[j + 1])
            {
                std::swap(v[j],v[j+1]);
            }
        }
    }
}

int main()
{
    // clock:时钟
    // time_point：时间点
    // system_clock:系统时钟
    // steady_clock:稳定时钟：从电脑开机时间开始计时
    // time_point t = system_clock::now();  // 获取当前时间
    // //把时间点 转为 time_t
    // std::time_t time = system_clock::to_time_t(t);
    // std::cout<<ctime(&time)<<std::endl;

    // steady_clock:稳定时钟：从电脑开机时间开始计时 纳秒
    // duration：时间间隔
    // time_point start = steady_clock::now();
    // sleep(3); // 休眠3秒
    // time_point end = steady_clock::now();
    // auto d = duration_cast<milliseconds>(end - start);
    // std::cout << d.count() << std::endl;

    std::vector<int> v;
    srand(time(nullptr));
    for(int i = 0;i < 100000;i++)
    {
        v.push_back(rand() % 100000);
    }

    auto v2 = v;
    Timer t;
    t.Start();
    std::sort(v.begin(),v.end());
    t.End();
    std::cout<<"标准库排序"<<t.GetDuration()<<std::endl;

    t.Start();
    BubbleSort(v2);
    t.End();
    std::cout<<"冒泡排序"<<t.GetDuration()<<std::endl;

    return 0;
}
